// Copyright (C) 1953-2022 NUDT
// Verilog module name - tsmp_packet_switch 
// Version: V4.1.0.20221212
// Created:
//         by - fenglin 
////////////////////////////////////////////////////////////////////////////
// Description:
//          
///////////////////////////////////////////////////////////////////////////

`timescale 1ns/1ps

module tsmp_packet_switch
(
        i_clk           ,   
        i_rst_n         ,
        
        i_local_or_remote_ctrl,
        
        iv_data_0       ,
        i_data_wr_0     ,        
        ov_data_0       ,        
        o_data_wr_0     , 

        iv_data_1       ,
        i_data_wr_1     ,        
        ov_data_1       ,        
        o_data_wr_1     ,  

        iv_data_2       ,
        i_data_wr_2     ,        
        //ov_data_2       ,        
        //o_data_wr_2     ,

        iv_data_3       ,
        i_data_wr_3     ,        
        ov_data_3       ,        
        o_data_wr_3               
);

// I/O
// clk & rst
input                   i_clk        ;
input                   i_rst_n      ;

input                   i_local_or_remote_ctrl;
// 
input       [8:0]       iv_data_0    ;
input                   i_data_wr_0  ;
output      [8:0]       ov_data_0    ;
output                  o_data_wr_0  ;
// 
input       [8:0]       iv_data_1    ;
input                   i_data_wr_1  ;
output      [8:0]       ov_data_1    ;
output                  o_data_wr_1  ;
// 
input       [8:0]       iv_data_2    ;
input                   i_data_wr_2  ;
//output      [8:0]       ov_data_2    ;
//output                  o_data_wr_2  ; 
// 
input       [8:0]       iv_data_3    ;
input                   i_data_wr_3  ;
output      [8:0]       ov_data_3    ;
output                  o_data_wr_3  ;     

packet_dispatch_1to2 tsmp_dispatch_1to2_inst
(
    .i_clk        (i_clk                 ),
    .i_rst_n      (i_rst_n               ),
	                          
	.i_ctrl       (i_local_or_remote_ctrl),//1'b0:local;  1'b1:remote
                             
    .iv_data      (iv_data_3       ),
	.i_data_wr    (i_data_wr_3     ),
                          
	.ov_data_0    (ov_data_0  ),//1'b0:local 
	.o_data_wr_0  (o_data_wr_0),
                      
	.ov_data_1    (ov_data_1  ),//1'b1:remote
	.o_data_wr_1  (o_data_wr_1)    
);

mux_5to1 control_packet_select_inst
(
        .i_clk                       (i_clk                   ),
        .i_rst_n                     (i_rst_n                 ),
                                      
        .iv_data_1                   (iv_data_0               ),
	    .i_data_wr_1                 (i_data_wr_0             ),
                                        
        .iv_data_2                   (iv_data_1               ),
        .i_data_wr_2                 (i_data_wr_1             ),
                                        
        .iv_data_3                   (iv_data_2               ),
        .i_data_wr_3                 (i_data_wr_2             ),
                                        
        .iv_data_4                   (9'b0                    ),
        .i_data_wr_4                 (1'b0                    ),
                                     
        .iv_data_5                   (9'b0                    ),
        .i_data_wr_5                 (1'b0                    ),        
                                        
        .ov_data                     (ov_data_3               ),
        .o_data_wr                   (o_data_wr_3             ),
                                      
        .ov_discard_pkt_cnt_fop_1  (),
        .ov_cut_pkt_cnt_fop_1      (),
        .ov_discard_pkt_cnt_fop_2  (),
        .ov_cut_pkt_cnt_fop_2      (),
        .ov_discard_pkt_cnt_fop_3  (),
        .ov_cut_pkt_cnt_fop_3      (),
        .ov_discard_pkt_cnt_fop_4  (),
        .ov_cut_pkt_cnt_fop_4      (),
        .ov_discard_pkt_cnt_fop_5  (),
        .ov_cut_pkt_cnt_fop_5      ()
    
); 
endmodule